package taweb.flex.air.fexBrowser.util
{
	import mx.collections.ArrayCollection;
	import mx.collections.ArrayList;
	import mx.utils.URLUtil;
	
	/**
	 * La class des outils fexBrowser.
	 */
	public class FexURLUtil extends URLUtil
	{
		public function FexURLUtil()
		{
			super();
		}
		
		/**
		 * Vérifie si l'URL fourni utilise le protocol http, https ou file en cas 
		 * d'une adresse absolue, sinon, sans protocol dans le cas d'une adresse relative.
		 * @param url L'URL à vérifier.
		 * @return <i>true</i> si l'URL est valide, <i>false</i> sinon.
		 */		
		public static function isURL(url:String):Boolean
		{
			var protocol:String = getProtocol(url);
			return protocol=="http" || protocol=="https" || protocol=="file";
		}
		
		/**
		 * Retourne le nom complet d'accès au serveur (protocol + server).
		 * @param url L'URL complet (avec le protocol).
		 * @return Le nom complet d'accès au serveur (protocol + server).
		 */		
		public static function getHost(url:String):String
		{
			return getProtocol(url) + "://" + getServerNameWithPort(url);
		}
		
		/**
		 * Retourne les chemin d'accès à la ressource et qui se trouve après  
		 * le nom de host.
		 * @param url L'URL complet (avec le protocol).
		 * @return Le chemin d'accès à la ressource (après le host).
		 */		
		public static function getPath(url:String):String
		{
			var path:String = url.replace(getHost(url), "");
			
			// On supprime le slash au début de chemin.
			if(path.substr(0, 1)=="/"){
				path = path.substr(1, path.length-1);
			}
			
			return path;
		}
		
		/**
		 * Retourne les parties (noeuds) de chemin d'accès à la ressource.
		 * @param url L'URL complet (avec le protocol).
		 * @return Un tableau des parties de chemin d'accès à la ressource.
		 */		
		public static function splitPath(url:String):Array
		{
			var path:String = getPath(url);
			return path.split("/");
		}
		
		
		/**
		 * Retourne l'URL absolu à partir d'un URL relatif.
		 * @param rootURL L'URL base de transformation 
		 * @param url L'URL à rendre absolu.
		 * @return L'URL absolu
		 * @remarks [Med] Selon mes tests, la méthode prédéfinie dans "URLUtil" échoue en cas 
		 * de protocol "file".
		 */
		public static function getFullURL(rootURL:String, url:String):String
		{
			var resultFullURL:String;
			
			// On s'assure qu'on transforme un chemin relatif
			if(!isURL(url))
			{
				if(getProtocol(rootURL)=="file")
				{
					// On transforme l'URL racine en protocole http
					rootURL = rootURL.replace("file:///", "http://localhost/");
					// On récupère l'URL absolu via URLUtil
					resultFullURL = URLUtil.getFullURL(rootURL, url);
					// On remis le protocole de base (file)
					resultFullURL = resultFullURL.replace("http://localhost/", "file:///");
				}
				else
				{
					resultFullURL = URLUtil.getFullURL(rootURL, url);
				}
			}
			else
			{
				resultFullURL = url;
			}
			
			return resultFullURL;
		}
			
	}
}